From 557c959126bb6cc4044b6404ef0098d499895136 Mon Sep 17 00:00:00 2001 From: Michal Skvely Date: Thu, 21 Jan 2021 19:31:39 +0100 Subject: [PATCH] Make ref counting atomic for series and shards --- include/siri/db/series.h | 4 ++-- include/siri/db/shard.h | 4 ++-- include/vec/vec.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/siri/db/series.h b/include/siri/db/series.h index 0e051aa8..bbd2ca2c 100644 --- a/include/siri/db/series.h +++ b/include/siri/db/series.h @@ -128,14 +128,14 @@ void siridb_series_ensure_type(siridb_series_t * series, qp_obj_t * qp_obj); /* * Increment the series reference counter. */ -#define siridb_series_incref(series) series->ref++ +#define siridb_series_incref(series) __atomic_add_fetch(&(series)->ref, 1, __ATOMIC_SEQ_CST) /* * Decrement reference counter for series and free the series when zero is * reached. */ #define siridb_series_decref(series__) \ - if (!--series__->ref) siridb__series_free(series__) + if (!__atomic_sub_fetch(&(series__)->ref, 1, __ATOMIC_SEQ_CST)) siridb__series_free(series__) #define siridb_series_server_id(series) \ diff --git a/include/siri/db/shard.h b/include/siri/db/shard.h index 969ef74d..45f2b9b3 100644 --- a/include/siri/db/shard.h +++ b/include/siri/db/shard.h @@ -162,7 +162,7 @@ static inline siridb_shard_get_points_cb siridb_shard_get_points_callback( /* * Increment the shard reference counter. */ -#define siridb_shard_incref(shard) shard->ref++ +#define siridb_shard_incref(shard) __atomic_add_fetch(&(shard)->ref, 1, __ATOMIC_SEQ_CST) /* * Decrement the reference counter, when 0 the shard will be destroyed. @@ -173,7 +173,7 @@ static inline siridb_shard_get_points_cb siridb_shard_get_points_callback( * A signal can be raised in case closing the shard file fails. */ #define siridb_shard_decref(shard__) \ - if (!--shard__->ref) siridb__shard_free(shard__) + if (!__atomic_sub_fetch(&(shard__)->ref, 1, __ATOMIC_SEQ_CST)) siridb__shard_free(shard__) #define siridb_shard_idx_file(Name__, Fn__) \ diff --git a/include/vec/vec.h b/include/vec/vec.h index 31b769a5..5598cb3b 100644 --- a/include/vec/vec.h +++ b/include/vec/vec.h @@ -24,7 +24,7 @@ int vec_append_safe(vec_t ** vec, void * data); * Expects the object to have a object->ref (uint_xxx_t) on top of the * objects definition. */ -#define vec_object_incref(object) ((vec_object_t * ) object)->ref++ +#define vec_object_incref(object) __atomic_add_fetch(&((vec_object_t * ) (object))->ref, 1, __ATOMIC_SEQ_CST) /* * Expects the object to have a object->ref (uint_xxx_t) on top of the @@ -34,7 +34,7 @@ int vec_append_safe(vec_t ** vec, void * data); * there are still references left on the object since an object * probably needs specific cleanup tasks. */ -#define vec_object_decref(object) ((vec_object_t * ) object)->ref-- +#define vec_object_decref(object) __atomic_sub_fetch(&((vec_object_t * ) (object))->ref, 1, __ATOMIC_SEQ_CST) /* * Append data to the list. This functions assumes the list can hold the new -- 2.30.2